Carga de paquetes y de datos

# Paquete para manipulación de datos
library(dplyr)

# Paquete para manejo de datos vectoriales
library(sf)

# Paquetes para manejo de datos raster
library(terra)
library(raster)

# Paquete para mapas interactivos
library(leaflet)

library(DT)
library(plotly)

Carga de datos

# Datos vectoriales
# Métodos de la clase sf
methods(class = "sf")
##  [1] $<-                   [                     [[<-                 
##  [4] aggregate             anti_join             arrange              
##  [7] as.data.frame         cbind                 coerce               
## [10] dbDataType            dbWriteTable          distinct             
## [13] dplyr_reconstruct     ext                   extent               
## [16] extract               filter                full_join            
## [19] group_by              group_split           identify             
## [22] initialize            inner_join            left_join            
## [25] mask                  merge                 mutate               
## [28] plot                  print                 raster               
## [31] rasterize             rbind                 rename               
## [34] right_join            rowwise               sample_frac          
## [37] sample_n              select                semi_join            
## [40] show                  slice                 slotsFromS3          
## [43] st_agr                st_agr<-              st_area              
## [46] st_as_s2              st_as_sf              st_bbox              
## [49] st_boundary           st_buffer             st_cast              
## [52] st_centroid           st_collection_extract st_convex_hull       
## [55] st_coordinates        st_crop               st_crs               
## [58] st_crs<-              st_difference         st_filter            
## [61] st_geometry           st_geometry<-         st_inscribed_circle  
## [64] st_interpolate_aw     st_intersection       st_intersects        
## [67] st_is                 st_is_valid           st_join              
## [70] st_line_merge         st_m_range            st_make_valid        
## [73] st_nearest_points     st_node               st_normalize         
## [76] st_point_on_surface   st_polygonize         st_precision         
## [79] st_reverse            st_sample             st_segmentize        
## [82] st_set_precision      st_shift_longitude    st_simplify          
## [85] st_snap               st_sym_difference     st_transform         
## [88] st_triangulate        st_union              st_voronoi           
## [91] st_wrap_dateline      st_write              st_z_range           
## [94] st_zm                 summarise             transform            
## [97] transmute             ungroup               vect                 
## see '?methods' for accessing help and source code
# Lectura de una capa vectorial (GeoJSON) de provincias de Costa Rica
provincias <-
  st_read(
    "https://github.com/tpb728O-programaciongeoespacialr/2021ii/raw/main/datos/ign/delimitacion-territorial-administrativa/provincias.geojson",
    quiet = TRUE
  )

# Lectura de un archivo CSV con registros de presencia de felinos en Costa Rica
felidae <-
  st_read(
    "/vsicurl/https://raw.githubusercontent.com/tpb728O-programaciongeoespacialr/2021ii/main/datos/gbif/felidae.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )


#ASIGNACION DE SISTEMA DE COORDENADAS
# Asignación de un CRS al objeto felidae
st_crs(felidae) <- 4326

# Transformación del CRS del objeto provincias
provincias <-
  provincias %>%
  st_transform(4326)

st_crs(provincias)
## Coordinate Reference System:
##   User input: EPSG:4326 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["geodetic latitude (Lat)",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["geodetic longitude (Lon)",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     USAGE[
##         SCOPE["Horizontal component of 3D system."],
##         AREA["World."],
##         BBOX[-90,-180,90,180]],
##     ID["EPSG",4326]]
# Lectura de una capa raster de altitud
altitud <-
  rast(
    "/vsicurl/https://raw.githubusercontent.com/tpb728O-programaciongeoespacialr/2021ii/master/datos/worldclim/altitud.tif"
  )

Tabla

felidae %>%
  st_drop_geometry() %>%
  dplyr::select(scientificName, stateProvince, locality, eventDate) %>% 
datatable()

#Graficos

felidae %>%
  st_drop_geometry() %>%
  group_by(mes = format(as.Date(eventDate, "%Y-%m-%d"), "%m")) %>%
  summarize(suma_registros = n()) %>%
  filter(!is.na(mes))  %>%
  plot_ly(x = ~ mes,
          y = ~ suma_registros,
          type="scatter", mode="markers", fill = "tozeroy", fillcolor = "green") %>%
  layout(title = "Estacionalidad",
         xaxis = list(title = "Mes"),
         yaxis = list(title = "Cantidad de registros"))

#Graficos-Historicos

felidae %>%
  st_drop_geometry() %>%
  group_by(anio = format(as.Date(eventDate, "%Y-%m-%d"), "%Y")) %>%
  summarize(suma_registros = n()) %>%
  filter(!is.na(anio))  %>%
  filter(anio >= 2011) %>%
  plot_ly(x = ~ anio,
          y = ~ suma_registros,
          type="bar", color = I("green")) %>%
  layout(title = "Historial",
         xaxis = list(title = "Año"),
         yaxis = list(title = "Cantidad de registros"))

#Raster

# Conversión del objeto altitud a la clase RasterLayer
altitud_rl <- raster::raster(altitud)

# Mapa leaflet básico con capas de provincias y registros de presencia de felinos
leaflet() %>%
  addTiles() %>%
  addRasterImage(
    altitud_rl, 
    opacity = 0.6
  ) %>%    
  addPolygons(
    data = provincias,
    color = "black",
    fillColor = "transparent",
    stroke = TRUE,
    weight = 1.0,
  ) %>%
  addCircleMarkers(
    data = felidae,
    stroke = F,
    radius = 4,
    fillColor = 'orange',
    fillOpacity = 1
  )
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
## prefer_proj): Discarded ellps WGS 84 in Proj4 definition: +proj=merc +a=6378137
## +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null
## +wktext +no_defs +type=crs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
## prefer_proj): Discarded datum World Geodetic System 1984 in Proj4 definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
## prefer_proj): Discarded ellps WGS 84 in Proj4 definition: +proj=merc +a=6378137
## +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null
## +wktext +no_defs +type=crs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
## prefer_proj): Discarded datum World Geodetic System 1984 in Proj4 definition